package com.mini.mybatis.io;

import java.io.IOException;
import java.io.InputStream;

/**
 * 资源加载工具类
 */
public class Resources {
    
    /**
     * 通过类路径获取资源文件的输入流
     * @param resource 资源文件路径
     * @return 输入流
     */
    public static InputStream getResourceAsStream(String resource) {
        return getResourceAsStream(null, resource);
    }
    
    /**
     * 通过指定的类加载器获取资源文件的输入流
     * @param loader 类加载器
     * @param resource 资源文件路径
     * @return 输入流
     */
    public static InputStream getResourceAsStream(ClassLoader loader, String resource) {
        InputStream inputStream = null;
        
        if (loader != null) {
            inputStream = loader.getResourceAsStream(resource);
        }
        
        if (inputStream == null) {
            inputStream = ClassLoader.getSystemResourceAsStream(resource);
        }
        
        if (inputStream == null) {
            inputStream = Resources.class.getClassLoader().getResourceAsStream(resource);
        }
        
        if (inputStream == null) {
            throw new RuntimeException("找不到资源文件: " + resource);
        }
        
        return inputStream;
    }
    
    /**
     * 获取资源文件的URL
     * @param resource 资源文件路径
     * @return URL字符串
     */
    public static String getResourceURL(String resource) {
        return getResourceURL(null, resource);
    }
    
    /**
     * 通过指定的类加载器获取资源文件的URL
     * @param loader 类加载器
     * @param resource 资源文件路径
     * @return URL字符串
     */
    public static String getResourceURL(ClassLoader loader, String resource) {
        java.net.URL url = null;
        
        if (loader != null) {
            url = loader.getResource(resource);
        }
        
        if (url == null) {
            url = ClassLoader.getSystemResource(resource);
        }
        
        if (url == null) {
            url = Resources.class.getClassLoader().getResource(resource);
        }
        
        if (url == null) {
            throw new RuntimeException("找不到资源文件: " + resource);
        }
        
        return url.toString();
    }
}